はじめての AWS CodeDeploy (プラス Auto Scaling)
こんにちは、菅野です。
突然ですが、Auto Scalingって便利ですよね。 昔 Auto Scaling を使っていた時の話ですが、PHPのプログラムを変更する度に AMI を作り、Launch Configurations を作り直して・・・といった作業をしていました(所要時間20分くらい)。 昔の話なのでもういいのですが、AWS CodeDeployを使えばそんな苦労は不要らしいという事を知り今回初めて使ってみることにしました。
今回の目標
- AutoScaling により作成されたEC2インスタンスへブラウザでアクセスした時に表示されるwebページを AWS CodeDeploy を使って更新する
- webページの管理に GitHub を使う
では早速始めましょう!
EC2 の準備
インスタンスを作成します。 作成時にタグを一つ追加しておいてください。(apl-name:test-apl) 起動したら以下のコマンドで最低限必要なものと codedeploy-agent をインストールしておきます。
sudo yum install httpd sudo service httpd start wget https://aws-codedeploy-ap-northeast-1.s3.amazonaws.com/latest/install chmod +x ./install sudo ./install auto sudo service codedeploy-agent start
AWS CodeDeploy の準備
AWS CodeDeploy で使う IAMロールを用意する
- ロール名(任意の名前)
- ロールタイプ(AWS CodeDeploy)
- アタッチするポリシー(AWSCodeDeployRole)
ソース管理用 GitHub の準備
- GitHub で新しいリポジトリを作成
- ローカルにclone
- appspec.ymlファイルを以下の内容で作成
version: 0.0 os: linux files: - source: src/ destination: /var/www/html/
- src/index.htmlを以下の内容で作成
<!DOCTYPE html> <html> <head> <title>テストページ</title> <meta charset="UTF-8"> </head> <body> テストページ Ver.1 </body> </html>
- commit と push
アプリケーションの作成
AWS CodeDeploy サービスのページへ行くと表示されるページに「今すぐ始める」ボタンがありますのでクリックしましょう。 次の画面では「カスタムデプロイ」を選択し「ウォークスルーのスキップ」ボタンをクリックします。
「アプリケーションの作成」ページでは以下の情報を入力します
- アプリケーション名(任意の名前)
- デプロイグループ名(任意の名前)
- インスタンスの指定(apl-name:test-apl というタグが付いているインスタンスにデプロイするように設定します)
- サービスロール(先ほど作成したロールを割り当てます)
入力が終わったら「アプリケーションの作成」ボタンをクリックします
デプロイの設定
先ほど作成した時に入力した「デプロイグループ名」がリストに表示されているのでそれをを選択し「アクション」-「新しいリビジョンのデプロイ」をクリックします。
「新しいデプロイの作成」というページが表示されるので、この画像のように入力します。
ここで「アプリケーションは GitHub に格納されています」を選択すると「GitHubに接続」ボタンが表示されるのでクリックするとGitHubのページが表示されますのでオレンジのボタンをクリックしてください 「今すぐデプロイ」ボタンをクリックするとデプロイが実行されます。 では、EC2インスタンスで確認しましょう。
$ ls /var/www/html index.html
ファイルが保存されていますのでデプロイ成功です。
Auto Scaling の準備
作業の流れは以下のようになります。
- AMI を作成する
- Launch Configurations を作成する
- Auto Scaling グループを作成する(apl-name:test-apl タグが自動で付与されるようにする)
Auto Scaling + AWS CodeDeploy を試す
ここまで準備してきましたが、やっと本番です。
確認に必要な準備
まず、htmlファイルに埋まっているバージョンの文字列の数字を1から2に変えてGitHubにコミットします。 最初に作成したEC2インスタンスに対して最新のリビジョンを AWS CodeDeploy でデプロイして成功させておきます。 また、デプロイグループの「インスタンスの追加」で先ほど作成した Auto Scaling グループを追加します。
Auto Scaling を動かして確認する
現在の状況を整理すると以下となります。
- リポジトリ内の最新のhtmlファイルの中は「Ver.2」になっている
- Auto Scaling で起動する時に使うAMI に保存されているhtmlファイルは「Ver.1」になっている
Auto Scaling により起動したEC2インスタンスに対して自動で AWS CodeDeploy が実行されれば「Ver.2」になるはずです。 では、Auto Scaling グループの設定で希望インスタンス数を1に変更し、インスタンスを起動し確認してみましょう。
$ cat index.html <!DOCTYPE html> <html> <head> <title>テストページ</title> <meta charset="UTF-8"> </head> <body> テストページ Ver.2 </body> </html>
自動で最新バージョンに更新されている事がブラウザでも確認できました。
最後に
いかがでしたでしょうか。 終わってみれば、GitHubの準備が一番大変だったのではないかと思うくらい AWS CodeDeploy と Auto Scaling の連携はあっさりとうまくいきました。 AWS CodeDeployは様々な場面で活用できると思いますので、まだ使った事が無い方は是非お試しください。
参考ページ
これらのページを参考にさせていただきました。 ありがとうございました。 AWS CodeDeployでAuto Scaling Lifecycleを手軽に利用する Install or Reinstall the AWS CodeDeploy Agent GitHubリポジトリと連携してAWS CodeDeployを使う(デプロイ編) EC2デプロイのためにCodeDeployを導入する